package com.dp1.pucp.Simulacion.Controlador;

import com.dp1.pucp.Modelo.Clases.Almacen;
import com.dp1.pucp.Modelo.Clases.Cliente;
import com.dp1.pucp.Modelo.Clases.Costoinsumos;
import com.dp1.pucp.Modelo.Clases.Empleado;
import com.dp1.pucp.Modelo.Clases.Historico;
import com.dp1.pucp.Modelo.Clases.Maquina;
import com.dp1.pucp.Modelo.Clases.Materiaprima;
import com.dp1.pucp.Modelo.Clases.Precio;
import com.dp1.pucp.Modelo.Clases.Presentacion;
import com.dp1.pucp.Modelo.Clases.Productofinal;
import com.dp1.pucp.Modelo.Clases.Productointermedio;
import com.dp1.pucp.Modelo.Clases.Productoxmaquina;
import com.dp1.pucp.Modelo.Clases.Proveedor;
import com.dp1.pucp.Modelo.Clases.RecetaPfMp;
import com.dp1.pucp.Modelo.Clases.RecetaPfPi;
import com.dp1.pucp.Modelo.Clases.Tipodecambio;
import com.dp1.pucp.Modelo.Clases.Tipoproducto;
import com.dp1.pucp.Simulacion.DAO.CargaMasivaDAO;
import com.dp1.pucp.Simulacion.VIsta.CargaMasivaGUI2;
import com.dp1.pucp.Util.Validaciones;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 *
 * @author Aventura sin la señorita
 */
public class CargaMasivaControlador {

    private CargaMasivaGUI2 datosInicialesView;
    private CargaMasivaDAO m;
    private CargaDatosTipoProducto opeDatosTipoProducto = new CargaDatosTipoProducto();
    private CargaDatosMaquinas opeDatosMaquinas = new CargaDatosMaquinas();
    private CargaDatosClientes opeDatosClientes = new CargaDatosClientes(); // (*)
    private CargarDatosOperarios opeDatosOperarios = new CargarDatosOperarios();
    private CargaDatosProveedores opeDatosProveedores = new CargaDatosProveedores();
    private CargaDatosCostosInsumos opeDatosCostosInsumos = new CargaDatosCostosInsumos();
    private CargaDatosReceta opeDatosReceta = new CargaDatosReceta();
    private CargaDatosRecetaPI opeDatosRecetaPI = new CargaDatosRecetaPI();
    private CargaDatosMateriaPrima opeDatosMateriaPrima = new CargaDatosMateriaPrima();
    private CargaDatosProductoIntermedio opeDatosProductoIntermedio = new CargaDatosProductoIntermedio();
    private CargaDatosProductoFinal opeDatosProductoFinal = new CargaDatosProductoFinal();
    private CargarDatosHistorico opeDatosHistorico = new CargarDatosHistorico();
    private CargaDatosProductoXMaquina opeDatosProductoXMaquina = new CargaDatosProductoXMaquina();
    private CargarDatosPrecios opeDatosPrecios = new CargarDatosPrecios();
    private CargarDatosPresentaciones opeDatosPresentacions = new CargarDatosPresentaciones();
    private CargarDatosAlmacen opeDatosAlmacenes = new CargarDatosAlmacen();
    private CargaDatosTipoCambio opeDatosTipoCambios = new CargaDatosTipoCambio();

    public CargaMasivaControlador(CargaMasivaGUI2 v, CargaMasivaDAO dao) {
        this.m = dao;
        this.datosInicialesView = v;

        datosInicialesView.addCargarDatosInicialesListener(new CargarButtonListener());
        datosInicialesView.addBuscarDatosInicialesListener(new AbrirFile());
    }

    class CargarButtonListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String dir = datosInicialesView.getNombreArchivoDatosIniciales();
            ArrayList<Empleado> emp = new ArrayList<>();
            ArrayList<Cliente> cli = new ArrayList<>();
            ArrayList<Historico> his = new ArrayList<>();
            ArrayList<Maquina> maq = new ArrayList<>();
            ArrayList<Proveedor> pro = new ArrayList<>();
            ArrayList<Materiaprima> matpri = new ArrayList<>();
            ArrayList<Productointermedio> proint = new ArrayList<>();
            ArrayList<Productofinal> profin = new ArrayList<>();
            ArrayList<RecetaPfMp> rec = new ArrayList<>();
            ArrayList<RecetaPfPi> recpi = new ArrayList<>();
            ArrayList<Costoinsumos> cosins = new ArrayList<>();
            ArrayList<Tipoproducto> tipopro = new ArrayList<>();
            ArrayList<Productoxmaquina> proxmaq = new ArrayList<>();
            ArrayList<Precio> precios = new ArrayList<>();
            ArrayList<Almacen> almacenes = new ArrayList<>();
            ArrayList<Presentacion> presentaciones = new ArrayList<>();
            ArrayList<Tipodecambio> tiposdecambios = new ArrayList<>();

            String mensaje = "Se cargaron los siguientes archivos: " + '\n';
            String separador=System.getProperty("file.separator");
             try {
                presentaciones = opeDatosPresentacions.LeePresentaciones(dir + separador+separador+"Presentacion.txt");
                mensaje = mensaje + "Presentacion.txt\n";
                m.guardarPresentacion(presentaciones);
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
             
            try {
                tiposdecambios = opeDatosTipoCambios.LeeTipoCambio(dir + separador+separador+"Tipodecambio.txt");
                mensaje = mensaje + "Tipodecambio.txt\n";
                m.guardarTipoCambio(tiposdecambios);
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }

            try {
                almacenes = opeDatosAlmacenes.LeeAlmacen(dir + separador+separador+"Almacen.txt");
                mensaje = mensaje + "Almacen.txt\n";
                m.guardarAlmacen(almacenes);
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }

            try {
                tipopro = opeDatosTipoProducto.LeeTipoProducto(dir + separador+separador+"TipoProducto.txt");
                m.guardarTipoProducto(tipopro);
                mensaje = mensaje + "TipoProducto.txt\n";
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }

            try {
                maq = opeDatosMaquinas.LeeMaquinas(dir + separador+separador+"Maquina.txt");
                m.guardarMaquina(maq);
                mensaje = mensaje + "Maquina.txt\n";

            } catch (Exception ex) {
                System.out.println(ex.toString());
            }

            try {
                cli = opeDatosClientes.LeeClientes(dir + separador+separador+"Clientes.txt");
                m.guardarClientes(cli);
                mensaje = mensaje + "Clientes.txt\n";

            } catch (Exception ex) {
                System.out.println(ex.toString());
            }

            try {
                emp = opeDatosOperarios.LeeEmpleados(dir + separador+separador+"Empleados.txt");
                m.guardarEmpleados(emp);
                mensaje = mensaje + "Empleados.txt\n";

            } catch (Exception ex) {
                System.out.println(ex.toString());
            }

            try {

                his = opeDatosHistorico.LeeHistoricos(dir + separador+separador+"Historico.txt");
                m.guardarHistorico(his);
                mensaje = mensaje + "Historico.txt\n";

            } catch (Exception ex) {
                System.out.println(ex.toString());
            }


            try {
                pro = opeDatosProveedores.LeeProveedores(dir + separador+separador+"Proveedores.txt");
                m.guardarProveedores(pro);
                mensaje = mensaje + "Proveedores.txt\n";

            } catch (Exception ex) {
                System.out.println(ex.getMessage());
            }
            try {
                cosins = opeDatosCostosInsumos.LeeCostosInsumos(dir + separador+separador+"CostoInsumos.txt");
                mensaje = mensaje + "CostoInsumos.txt\n";
                m.guardarCostosInsumos(cosins);
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
            try {
                rec = opeDatosReceta.LeeReceta(dir + separador+separador+"RecetaMP.txt");
                mensaje = mensaje + "RecetasMP.txt\n";
                m.guardarReceta(rec);
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
            try {
                recpi = opeDatosRecetaPI.LeeReceta(dir + separador+separador+"RecetaPI.txt");
                mensaje = mensaje + "RecetasPI.txt\n";
                m.guardarRecetaPI(recpi);
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
            try {
                matpri = opeDatosMateriaPrima.LeeMateriaPrima(dir + separador+separador+"MateriaPrima.txt");
                m.guardarMateriaPrima(matpri);
                mensaje = mensaje + "MateriaPrima.txt\n";

            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
            try {
                proint = opeDatosProductoIntermedio.LeeProductoIntermedio(dir + separador+separador+"ProductoIntermedio.txt");
                m.guardarProductoIntermedio(proint);
                mensaje = mensaje + "ProductoIntermedio.txt\n";

            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
            try {
                profin = opeDatosProductoFinal.LeeProductoFinal(dir + separador+separador+"ProductoFinal.txt");
                m.guardarProductoFinales(profin);
                mensaje = mensaje + "ProductoFinal.txt\n";
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
            try {
                proxmaq = opeDatosProductoXMaquina.LeeProductosXMaquina(dir + separador+separador+"ProductoxMaquina.txt");
                m.guardarProductoXMaquina(proxmaq);
                 mensaje = mensaje + "ProductoXMaquina.txt\n";
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
            //lucia

            try {
                precios = opeDatosPrecios.LeePrecios(dir + separador+separador+"Precio.txt");
                m.guardarPrecios(precios);
                 mensaje = mensaje + "Precio.txt\n";
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }


           


            Validaciones.mostrarMensajeAvisoVal(mensaje);
            datosInicialesView.limpiarCampos();
            
            /*

             try {
             int pos = dir.lastIndexOf("/");
             String comparar = dir.substring(pos + 1);
             if (comparar.equals("Clientes.txt")) {
             cli = opeDatosClientes.LeeClientes(dir);
             m.guardarClientes(cli);
             }
             if (comparar.equals("Proveedores.txt")) {
             pro = opeDatosProveedores.LeeProveedores(dir);
             m.guardarProveedores(pro);
             }
             if (comparar.equals("Empleados.txt")) {
             emp = opeDatosOperarios.LeeEmpleados(dir);
             m.guardarEmpleados(emp);
             }
             if (comparar.equals("Historico.txt")) {
             his = opeDatosHistorico.LeeHistoricos(dir);
             m.guardarHistorico(his);
             }
             if (comparar.equals("Maquina.txt")) {
             maq = opeDatosMaquinas.LeeMaquinas(dir);
             m.guardarMaquinas(maq);
             }
             } catch (Exception ex) {
             ex.toString();
             }
             */

        }
    }

    class AbrirFile implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo de txt", "txt");
            JFileChooser filechooser = new JFileChooser();
            filechooser.setFileFilter(filter);
            filechooser.setDialogTitle("Abrir archivo en");
            filechooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
            int result = filechooser.showOpenDialog(null);
            if (result == JFileChooser.APPROVE_OPTION) {
                //int EsCorrecto=CarpetaCorrecta(filechooser.getCurrentDirectory().getPath());             
                // if (EsCorrecto == 3)
                datosInicialesView.setNombreArchivoDatosIniciales(filechooser.getSelectedFile().getParent());
                //else{
                //   datosInicialesView.mostrarError("No se encuentra todos los archivos en la carpeta");
                //   datosInicialesView.setNombreArchivoDatosIniciales("");
                //}
            }
        }
    }
}
